package com.baidu.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.baidu.entity.PageResult;
import com.baidu.entity.QueryPageBean;
import com.baidu.entity.Result;
import com.baidu.mapper.CheckItemMapper;
import com.baidu.pojo.CheckItem;
import com.baidu.service.CheckItemService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

//明确指定我们当前发布服务的接口是哪一个。
@Service(interfaceClass = CheckItemService.class)//要用dubbo技术的注解表示服务层。这样可以向服务中心注册。
//加上Transaction事务注解，用的是spring的基于jdk的动态代理，创建的代理对象以$.proxy结尾。
//所以要在开启事务的注解驱动配置;处理目标类的的方式。true为cglib。
// 这样创建出来的对象的包结构，与我们发布服务的扫描的包结构才是一样的。

@Transactional
public class CheckItemServiceImpl implements CheckItemService {

	@Autowired
	private CheckItemMapper checkItemMapper;

	@Override
	public void add(CheckItem checkItem) {

		checkItemMapper.add(checkItem);

	}

	@Override //这是service的实现类。调用dao的接口，dao接口的实现类在，mapper映射文件中。
	public PageResult pageQuery(QueryPageBean queryPageBean) {

		PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());//会自动的添加limit关键字
		System.out.println(queryPageBean.getCurrentPage()+"//ss"+queryPageBean.getPageSize()+"//"+queryPageBean.getQueryString());

		//使用分页助手之后，limit0,10 。这个条件就不用我们写了。我们只用写 limit之前的语句

		Page<CheckItem> page= checkItemMapper.pageQuerybyCondition(queryPageBean.getQueryString());//该Page对象是分页助手帮助我们封住的对象。

/*
* 创建分页助手对象，需要两个参数，当前页，每页显示条数。
* 使用分页助手，并获得分页助手的各个分页参数之前，需要跟一个查询语句。通过该查询语句的基础上，自动补充查询各个分页参数。
* 也就是说查询返回的对象中(Page<CheckItem> page)自带各个分页参数。
*
* */

/*
我们最终是要返回PageResult对象。通过分页对象获得参数来封装PageResult。
 */
		PageResult pageResult = new PageResult(page.getTotal(),page.getResult());

		return pageResult;
	}


	/**
	 * 删
	 * @param id
	 */
	@Override
	public void deleteByid(Integer id) {
		//调用dao的接口
		/*
		不能直接删除，因为检查项可能关联检查组，这里还要判断该id是否关联检查组，有的话删除失败。
		 */

		Long count =  checkItemMapper.findCountByCheckItemId(id);
		System.out.println("count="+count);
		if (count>=1){//表示有关联
			 throw new RuntimeException("当前检查项被引用，不能删除");
		}
		checkItemMapper.deleteByid(id);



	}

	@Override
	public CheckItem findById(Integer id) {
		return checkItemMapper.findById(id);
	}

	@Override
	public void editCheckItem(CheckItem checkItem) {
		checkItemMapper.editCheckItem(checkItem);
	}

	@Override
	public List<CheckItem> findAll() {
		return 	checkItemMapper.findAll();
	}
}
